package com.nicolas.pattern.command;

/**
 * 命令模式可以将请求发送者和接收者完全解耦，发送者与接收者之间没有直接引用关系，
 * 发送请求的对象只需要知道如何发送请求，而不必知道如何完成请求。

命令模式定义如下： 命令模式(Command Pattern)：将一个请求封装为一个对象，
从而让我们可用不同的请求对客户进行参数化；对请求排队或者记录请求日志，以及支持可撤销的操作。
命令模式是一种对象行为型模式，其别名为动作(Action)模式或事务(Transaction)模式。
 * @author nicolas  2017年2月12日 -- 下午5:29:19
 */
public class CommandMain {

	public static void main(String[] args) {
		 FBSettingWindow fbsw = new FBSettingWindow("功能键设置");  
         
        FunctionButton fb1,fb2;  
        fb1 = new FunctionButton("功能键1");  
        fb2 = new FunctionButton("功能键1");  
          
        Command command1,command2;  
        //通过读取配置文件和反射生成具体命令对象  
        command1 = (Command)XMLUtil.getBean(0);  
        command2 = (Command)XMLUtil.getBean(1);  
          
        //将命令对象注入功能键  
        fb1.setCommand(command1);  
        fb2.setCommand(command2);  
          
        fbsw.addFunctionButton(fb1);  
        fbsw.addFunctionButton(fb2);  
        fbsw.display();  
          
        //调用功能键的业务方法  
        fb1.onClick();  
        fb2.onClick();  
	}

}
